iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1

Agent
Agent 模組提供了我們可以實踐一個基本的服務器的一個 API 的功能。
可以讓我們在不同的節點間共用狀態及更新狀態。

透過 Agent,我們可以將一個模組包裝成可以初始化的一個服務器,並且可以讓不同行程間去做存取。

defmodule Test do
  use Agent

  def start_link(initail_state) do
    Agent.start_link(fn -> initail_state end, name: __MODULE__)
  end

  def value do
    Agent.get(__MODULE__, &(&1))
  end

  def add do
    Agent.update(__MODULE__, &(&1 + 1))
  end
  
  def sub do
    Agent.update(__MODULE__, &(&1 - 1))
  end
end

__MODULE__是模組名稱,也就是Test。如此,我們便成功完成了一個可以做為一個簡易API執行的模組。

iex> Test.value()    
0
iex> Test.add
:ok
iex> Test.add
:ok
iex> Test.value()
2
iex> Test.sub      
:ok
iex> Test.value()
1

在 children 中放入 Test 以及其初始值的 Tuple,便能在監督樹下運行此 API。

children = [
  {Test, 0}
]

Supervisor.start_link(children, strategy: :one_for_all)

上一篇
Day 28 |> Elixir 並行性 (二)
下一篇
Day 30 |> 完賽心得
系列文
用Elixir學習後端煉金術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言